トップページに戻る

Seaborn ― matplotlib をより美しく、使いやすく

In [1]:
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
In [2]:
x = np.linspace(0,2*np.pi,1024)
plt.plot(x, np.sin(x))
Out[2]:
[<matplotlib.lines.Line2D at 0x130b86b00>]

seaborn を import し、 set_theme 関数を呼ぶとスタイルが適用されます。

In [3]:
import seaborn as sns
sns.set_theme()
In [4]:
plt.plot(x, np.sin(x))
Out[4]:
[<matplotlib.lines.Line2D at 0x1489fdba0>]

他のスタイルも適用できます。

In [5]:
sns.set_style("whitegrid")
plt.plot(x, np.sin(x))
Out[5]:
[<matplotlib.lines.Line2D at 0x148a6a8f0>]

Seaborn は pandas と連携することで真価をみせます。

さきほどの人口データです。

In [6]:
import pandas as pd

df = pd.read_csv("c02.csv", encoding="utf-8")
df
Out[6]:
prefecturecode prefecture 元号 和暦(年) year population male female
0 00 全国 大正 9 1920 NaN 55963053 28044185 27918868
1 01 北海道 大正 9 1920 NaN 2359183 1244322 1114861
2 02 青森県 大正 9 1920 NaN 756454 381293 375161
3 03 岩手県 大正 9 1920 NaN 845540 421069 424471
4 04 宮城県 大正 9 1920 NaN 961768 485309 476459
... ... ... ... ... ... ... ... ... ...
974 43 熊本県 平成 27 2015 NaN 1786170 841046 945124
975 44 大分県 平成 27 2015 NaN 1166338 551932 614406
976 45 宮崎県 平成 27 2015 NaN 1104069 519242 584827
977 46 鹿児島県 平成 27 2015 NaN 1648177 773061 875116
978 47 沖縄県 平成 27 2015 NaN 1433566 704619 728947

979 rows × 9 columns

自動的にフィッティングを行わせます。ラベルも自動でつきます。

In [7]:
sns.lmplot(x="year", y="population", hue='prefecturecode', order=2, data=df)
Out[7]:
<seaborn.axisgrid.FacetGrid at 0x148a97880>

1920 年の県別人口と、2000年の県別人口がどのように相関しているか調べたいとします。 これにはpairplotが使えます。

まず、Dataframe を少し変換して、県 × 各年の人口の表の形式にします。

In [8]:
# 都道府県のみ・特定の年数に絞るため filter する
years = [1920, 1960, 2000]
df_only_prefecture = df[df.prefecturecode.isin([f'{i:02}' for i in range (1, 48)]) & df.year.isin(years)]
In [9]:
# pivot_table を使うと値を列に変換できる
df_table = df_only_prefecture.pivot_table(values='population', index=['prefecturecode', 'prefecture'], columns='year')
df_table.head(10)
Out[9]:
year 1920 1960 2000
prefecturecode prefecture
01 北海道 2359183 5039206 5683062
02 青森県 756454 1426606 1475728
03 岩手県 845540 1448517 1416180
04 宮城県 961768 1743195 2365320
05 秋田県 898537 1335580 1189279
06 山形県 968925 1320664 1244147
07 福島県 1362750 2051137 2126935
08 茨城県 1350400 2047024 2985676
09 栃木県 1046479 1513624 2004817
10 群馬県 1052610 1578476 2024852
In [10]:
sns.pairplot(df_table[[1920, 1960, 2000]])
Out[10]:
<seaborn.axisgrid.PairGrid at 0x148e94e50>

基礎編

応用編